﻿namespace Tszy.Unlimited.Base.Infrastructure.Stores;

/// <summary>
/// 限制范围的存储器。
/// </summary>
/// <remarks>
/// 在指定的 Microsoft.Extensions.DependencyInjection 中的 Scope 范围内，共享唯一的实例。
/// 不同的范围用的不同的实例。
/// </remarks>
public interface IScopeStore
{
    /// <summary>
    /// 唯一标识。
    /// </summary>
    Guid UniqueId { get; }

    /// <summary>
    /// 保存数据。
    /// </summary>
    /// <typeparam name="TValue">值对象类型。</typeparam>
    /// <param name="key">标识。</param>
    /// <param name="value">值对象。</param>
    /// <param name="overlay">是否覆盖。</param>
    void Save<TValue>(string key, TValue value, bool overlay = true);

    /// <summary>
    /// 获得数据。
    /// </summary>
    /// <typeparam name="TValue">值对象类型。</typeparam>
    /// <param name="key">标识。</param>
    /// <returns>值对象。</returns>
    TValue Get<TValue>(string key);

    /// <summary>
    /// 获得所有数据。
    /// </summary>
    /// <returns></returns>
    IEnumerable<object> GetAll();
}